import instance from '../../utils/http'
import { getSwiperData } from '../../api/index'
// npm i async-validator
import Schema from 'async-validator'
Page({
  
  /**
   * 页面的初始数据
   */
  data: {
    avatarUrl: '../../assets/banner/banner-2.jpg'
  },

  //  第二种调用方式，通过await和async 的方式进行调用
  // async testRequest () {  
  //   const res =  await instance.request({
  //     url:'/index/findBanner',
  //     method: 'GET'
  //   })
  //   console.log('请求返回的数据',res)
  // }
  async testRequest () {
    const res = await getSwiperData()
    // const res = await instance.get('/index/findBanner',null,{isLoading : false})
    // const res = await instance.get('/cart/getCartList').catch((res) => {
    //   console.log('请求时发生的错误信息',res)
    // })
    console.log('请求返回的数据',res)

    // 演示通过 Promise.all 同时发起多个请求
    // Promise.all 能够将多个请求同时进行发送
    // Promise.all 能够将多个异步请求同时进行发送，也就是并行发送
    // 并不会造成请求的阻塞，从而不会影响页面的渲染速度
    // await Promise.all([instance.get('/xxxx'),instance.get('/xxxx'),instance.get('/xxxx'),]);
  },

  // TODO 获取微信头像，调试基础库的版本太高时，点击页面的图片是不会调用获取微信头像的方法（chooseavatar）的
  async chooseavatar (event) {
    const { avatarUrl } = event.detail

    const res = await instance.upload('/fileUpload',avatarUrl,'file');
    console.log('封装后的uploadAvatar',res)
    // this.setData({
    //   // key和value名一致时可以简写
    //   avatarUrl
    // })
    // wx.uploadFile({
    //   // 开发者服务器地址、接口地址
    //   url: 'https://gmall-prod.atguigu.cn/mall-api/fileUpload',
    //   // 文件要上传的路径
    //   filePath: avatarUrl,
    //   // 文件对应的key,服务器需要根据key来获取文件的二进制信息
    //   name: 'file',

    //   success : (res) => {
    //     // 服务器返回的数据是JSON 字符串，在使用的时候，需要进行转换JSON. parse进行转换
    //     res.data = JSON.parse(res.data);
    //     console.log('上传文件',res.data)
    //     // http://139.198.127.41:9000/sph/20240712/JGwpGlO2qqzj3fbaead2fc188b2e88b113e3013861b1.jpeg
    //     this.setData({
    //       avatarUrl : res.data.data
    //     })
    //   } 
    // })
  },

  // 用户拒绝授权后的处理方案-整体逻辑
  async onLoacation () {
    // authSetting 获取小程序已经向用户申请的权限，并且会返回授权的结果
    const { authSetting } = await wx.getSetting();
    // scope.userLocation 用户是否授权小程序获取位置信息

    // 判断用户是否拒绝了授权
    if (authSetting['scope.userLocation'] === false) {
      // 用户之前拒绝授权获取位置信息，再次向用户发起了授权
      // 这时候需要使用一个弹框询问用户是否进行授权
      const modalRes = await wx.modal({
        titel : '授权提示',
        content : '需要获取地理位置信息，请确认授权'
      })

      // 如果用户点击了取消，说明用户拒绝了授权，需要给用户进行提示
      if ( !modalRes) return wx.toast({ title: '您拒绝了授权' })

      // 如果用户点击了确定，说明用户同意授权，需要打开微信客户端小程序授权页面
      const {authSetting} = await wx.openSetting()
      // 如果用户没有更新授权信息，需要给用户提示授权失败
      if (!authSetting['scope.userLocation'])
        return wx.toast({title: '授权失败'})

      // 如果用户更新了授权信息，说明用户同意授权获取位置信息
      try {
        const locationRes = await wx.getLocation()
      } catch (error) {
        wx.toast({titel: '您拒绝授权获取位置信息'}) 
      }
    } else {
      try {
        const locationRes = await wx.getLocation()
      } catch (error) {
        wx.toast({titel: '您拒绝授权获取位置信息'}) 
      }
    } 
  },

  onValidator () {

    // 定义规则
    const rules = {
      // key验证规则的名字，名字需要和验证的数据保持一致
      name : [
        {required : true,message : ' name 不能为空'},
        {type : 'string',message : 'name 不是字符串'},
        {min: 2, max : 3, message : '名字最少是 2 个字，最多是 3 个字'},
        // 匹配正则表达式
        {pattern : '', message : ''},
        // 自定义验证规则
        // {validator : () => {}}
      ] 
    }

    // 需要对构造函数进行实例化，同时传入验证规则
    const validator = new Schema(rules);

    // 需要调用 validate 实例方法，对数据进行验证
    // 第一个参数：需要验证的数据，要求数据是一个对象
    // validate 方法只会验证和验证规则同名的字段
    // 第二个参数：是一个回调函数
    validator.validate(this.data, (errors,fields) => {

      if(errors) {
        console.log('验证失败')
      // 如果验证成功，errors 是一个 null
      // 如果验证失败，errors 是一个数组，数组每一项是错误信息
      console.log('错误信息-errors',errors)
      console.log('错误信息-fields',fields)
      // fields 是需要验证的属性，属性值是一个数组，数组中也包含着错误信息
      } else {
        console.log('验证成功')
      }
    })
  }
})